package com.iaz.tech.tools.common.utils;

/**
 * 用于支持双向链表，附加子链表
 * 支持子计划执行
 * 支持复杂命令，用于Knowledge 的处理，进行复杂的业务判断和组合
 */
public interface IChainChildrenListAble<T> {
	/**
	 * 在当前的_cursor 附加子链表
	 * @param childChainList
	 * @return
	 */
	IChainNodeAble<T> attachDefaultCursorChainList(IChainNodeAble<T> childChainList);	
	/**
	 * 在指定的游标初，附加子链表
	 * @param _cursor
	 * @param childChainList
	 * @return
	 */
	IChainNodeAble<T> attachChainList(IChainNodeAble<T> _cursor, IChainNodeAble<T> childChainList);
	/**
	 * 在指定的节点的子链末端添加子链，用于
	 * @param _cursor
	 * @param data
	 * @return
	 */
	IChainNodeAble<T> appendChainListWithData(IChainNodeAble<T> _cursor, T data);
	/**
	 * 清除_cursor子链
	 */
	void clearChildren(IChainNodeAble<T> _cursor);
	/**
	 * 删除指定位置
	 * @param post
	 */
	T deleteChild(IChainNodeAble<T> _cursor, int post);
	/**
	 * 删除子链末尾
	 */
	T deleteTail(IChainNodeAble<T> _cursor);
	/**
	 * 移动到指定位置范围内，第一个有子链的节点
	 * @param startPost
	 * @param endPost
	 * @return
	 */
	IChainNodeAble<T> indexHasChildrenChain(int startPost, int endPost);
	/**
	 * 最后一个有子链的节点，（指定范围内）
	 * @param startPost
	 * @param endPost
	 * @return
	 */
	IChainNodeAble<T> lastIndexHasChildrenChain(int startPost, int endPost);
	
}
